package com.xyq.friend.elasticsearch;

import com.xyq.friend.domain.question.es.QuestionES;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface QuestionRepository  extends ElasticsearchRepository<QuestionES,Long> {    // 数据实体类 ,和主键 id类型

    // 按难度查找 ,  没有查询题目名字或内容名字  按 分页查询 , 不需要写查询操作, spring data会按方法自动查询
   Page<QuestionES> findQuestionESByDifficulty(Integer difficulty , Pageable pageable) ;    // 传一个pageable 分页

    // 按 (标题 或 内容 ) and 难度 查找   ,    传参按下标来: title:下标是0 , 所以用 ?0 , content: 1 , ?1 , difficulty: 2 , ?2
    @Query("{ \"bool\": { \"must\": [ { \"term\": {  \"difficulty\": \"?2\" } } ], \"should\": [ { \"match\": {   \"title\": \"?0\"  }  },  { \"match\": { \"content\": \"?1\"  } } ], \"minimum_should_match\": 1 } }")
    Page<QuestionES> findByTitleOrContentAAndDifficulty(String keywordTitle , String keywordContent , Integer difficulty , Pageable pageable);

    // 按 标题 和 内容 查找
    @Query("{ \"bool\": {\"should\": [ { \"match\": {   \"title\": \"?0\"  }  },  { \"match\": { \"content\": \"?1\"  } } ], \"minimum_should_match\": 1 } }")
    Page<QuestionES> findByTitleOrContent(String keywordTitle , String keywordContent , Pageable pageable);

}
